세미프로젝트2_01_샌드박스 구축을 통한 악성코드 자동 탐지 및 분석 시스템 개발
두 번째 세미프로젝트
이번 과제는 악성코드 분석용 샌드박스를 구축하고 자동 탐지와 분석 시스템까지 만들어보는 내용이었다. 주제를 보자마자 "이번엔 결국 VM이구나" 싶었다. 환경 구축이 꽤 번거로워질 거라는 것도 바로 감이 왔다.
Ghidra나 IDA 같은 정적 분석 도구는 조금이나마 써본 적이 있지만 동적 분석 쪽은 사실상 처음이었다. 굳이 내가 먼저 찾아서 해볼 일이 아니었으니 더 낯설었다.
도구는 오픈소스인 CAPEv2를 쓰라고 했다. 오픈소스 셋업이라는 말을 들으면 늘 비슷한 예감이 든다. 문서는 듬성듬성하고 에러는 환경마다 다르다. 결국 하나하나 부딪혀가며 맞춰야 한다.
다만 지난 프로젝트에서 배운 교훈이 있었다. 이번에는 혼자 독박쓰지 말자는 거였다. 원래 같았으면 "제 서버에 먼저 올려둘게요. 다들 접속해서 분석하고 룰 붙여보세요"라고 했겠지만 이번에는 그렇게 가지 않기로 했다.
어차피 다들 공부하러 온 거라면 환경 구축 정도는 각자 한 번쯤 직접 해보는 게 맞다고 봤다. 그래서 이번에는 각자 자기 PC에서 CAPE 환경을 올리는 방향으로 정리했다.
홈 서버에 올리려다가
나는 평소에 쓰는 리눅스 홈 서버가 있다. 게임 관련 간단한 앱이나 블로그, 젤리핀 같은 걸 올려두는 소규모 서버다. 처음엔 거기에 올릴까 했는데 CAPE가 시스템과 커널 수준의 설정을 제법 깊게 건드리려는 걸 보고 바로 접었다. 네트워크 브릿지 설정부터 KVM 모듈 로딩까지 손대는 범위가 컸다. 잘못하면 기존 서비스에 영향이 갈 수 있겠다고 판단했다.
그래서 방향을 바꿨다. 용량도 넉넉하니 그냥 듀얼부팅으로 가자 싶었다. 어차피 계속 켜둘 환경은 아니고 필요할 때만 잠깐 부팅해서 쓰면 된다. 그렇게 리눅스 서버를 따로 설치해 CAPE 전용 환경으로 격리했다. 희생 윈도우는 메인 PC에서 virt-viewer로 붙어 설정하는 구조로 잡았다.
환경 구축
Ubuntu Server 22.04.5 LTS를 올리고 부팅하고 볼륨 설정을 잡았다.
최종 구성은 이렇다.
Native Linux(Host)
- OS: Ubuntu Server 22.04.5 LTS
- CPU: 4 Cores / RAM: 16GB
- cape-rooter, cape-processor, cape-web, cape(cuckoo.py)를 Poetry 가상환경 기반으로 구동
- 네트워크: virbr0 인터페이스를 통한 Host-only/NAT 구성
- 스토리지: CAPEv2/storage/ 경로에 분석 데이터 저장
- 분석 카테고리: static, pcap, url, file 지원
Windows 10(희생 VM)
- KVM 모듈을 사용하여 Libvirt 기반 VM 제어
- 파이썬 등 기본 환경 설치
- Windows Defender 및 백신 비활성화
- CAPE_Ready 스냅샷 생성 후 분석 에이전트(agent.py) 상주
기본 설정은 생각보다 빡빡했다. 가상화 환경은 늘 그렇지만 사소한 권한 문제 하나가 시간을 꽤 잡아먹는다. 실제로 cape 사용자가 libvirt, kvm 그룹에 포함되지 않아 VM 제어에 실패하는 문제도 있었다. 그룹 추가 후 재로그인하니 해결됐다. 이런 자잘한 이슈가 셋업 시간을 크게 늘린다.
WannaCry 분석 성공
vx-underground에서 WannaCry 샘플을 받아 실제로 분석을 돌려봤다. 격리된 리눅스 서버의 storage 볼륨으로 curl을 이용해 샘플을 받고 CAPE 엔진이 희생 윈도우로 파일을 넘겨 분석하는 구조다. 분석이 끝나면 희생 VM은 스냅샷으로 복구된다.
- 파일명:
ed01ebfbc9eb5bbea545.exe - 탐지 시그니처:
ransomware_files: "Creates a known WannaCry ransomware decryption instruction / key file." (위험도 3/High)antivm_checks_available_memory: 가상 환경 탐지 시도- 시스템 정보 쿼리: 컴퓨터 이름, 사용자 이름, 키보드 레이아웃 등 확인
샌드박스 구축 자체는 이걸로 성공이라고 볼 수 있다. 실제 랜섬웨어 샘플을 넣었을 때 기대한 시그니처가 잡혔다는 건 최소한 파이프라인이 제대로 돌고 있다는 뜻이기 때문이다.
여담
구축하다 보니 Proxmox도 자연스럽게 더 찾아보게 됐다. 하이퍼바이저 기반 가상화 플랫폼인데 기존 홈 서버가 조금 주먹구구식으로 굴러가고 있어서 나중에 시간 나면 옮겨볼 생각이다. 지금 돌리는 서비스들을 Proxmox 위로 정리하면 관리가 훨씬 깔끔해질 것 같다.